package yl.hs.bmipfull.service.salemanage;

import yl.hs.bmipfull.pojo.salemanage.CustomerInfoEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;
import yl.hs.bmipfull.viewmodels.SubmitModel;

import java.util.List;

/*
 * ICustomerInfoService
 * @category
 * @author 谢景广
 * @date 2021-05-17
 */
public interface ICustomerInfoService extends IBaseService {
    /**
     * 分页查询客户信息
     *
     * @param query  查询参数和排序参数
     * @param rowNum 页面显示数据数量
     * @param page   当前页码
     * @return 客户信息
     */
    PageResult<CustomerInfoEntity> queryPage(PageQuery query, int rowNum, int page);



    /**
     * 保存用户提交的客户信息表单数据
     *
     * @param form 客户信息表单数据
     * @return 保存结果
     */
    Integer saveCustomer(SubmitModel form) throws Exception;

    /***
     * 创建客户信息
     * @param entity 客户信息
     * @return 返回保存结果
     * @throws Exception 异常
     */
    Integer createCustomer(CustomerInfoEntity entity) throws Exception;

    /**
     * 根据客户编号数据删除客户信息
     *
     * @param snArray 客户编号数组
     * @return 删除结果
     */
    Integer deleteBySn(String[] snArray);

    /**
     * 根据客户编号获取客户信息
     *
     * @param sn 客户编号
     * @return 客户信息
     */
    CustomerInfoEntity findBySN(String sn);

    /**
     * 获取客户信息
     *
     * @return 客户信息-List<{@link CustomerInfoEntity}>
     */
    List<CustomerInfoEntity> getList(Short state);

    /**
     * 根据客户名获取客户信息
     *
     * @param customerName 客户名
     * @return 客户信息
     */
    CustomerInfoEntity findByName(String customerName,String sn);

    /**
     * 客户信息验证
     *
     * @param customerName 客户名称
     * @param sn 编号
     * @return 验证结果 true:表示通过验证，false：未通过验证
     */
    Boolean customerValida(String customerName,String sn);

    /**
     * 保存客户信息
     *
     * @param customerName 客户名称
     * @return 客户编号
     * @throws Exception 保存异常
     */
    String saveCustomer(String customerName) throws Exception;

    /**
     * 恢复数据
     * @param snArray sn-Array
     * @return 执行结果
     */
    boolean recovery(List<String> snArray );

    Integer changeStateBySn(String[] snArray,short state);

    /**
     * 客户信息权限转移
     * @param userSN 用户编号
     * @return 受影响行数
     */
    Integer customerTransfer(String mainSN,String userSN);
}
